// type注解对象类型


type Person = {
  name:string,
  age:number,
  sex?:string
}

const p:Person = {
  name:'jack',
  age:17,
  sex:'male'
}

// 交叉类型 模拟继承  & 

// 父接口
type Fu = {
  id:string,
  price:number
}

// 子接口 模拟继承
type  Zi = Fu & {
  name:string
}

interface A1 {
  name:string
}


interface A1 {
  age:number
}


let a:A1 = {
  name:'jack',
  age:''
}

// 字面量
// 指的是具体的值 , 是什么就长成什么样子
// 
let num = 123
let num2 = num + 5 - 5
let arr = new Array(1,2,3)
let arr1 = []
let obj1 = new Object()
let obj = {}

// ts

// let count:number = 100
let count:100 // 字面量 :number , 会用一个不太迷惑你的字面量值,来充当类型

// count = 100
count = 200


console.log('count:',count);


//  {}  new(堆内存)  得到地址值 , 在这个地址里面, 随便改值, 地址是不变的
// watch   deep: 深度监听


// [] 字面量没有这个特征
// let array:[]
// array = [1,2,3,4,5,6]


//  {}  new(堆内存)  得到地址值 , 在这个地址里面, 随便改值, 地址是不变的
// watch   deep: 深度监听
let obj2:{}
obj2 = {name:'jack'}

console.log('obj2:',obj2);


// 和 联合类型 配合使用 | 

type Gender = '男'|'女'

let gender:Gender = '男'
let gender1:Gender = '女'


// 和const作比较
// 常量是不可以进行重新赋值的
// 看两种情况的报错

let str1:'jack'
str1  = 'jack666'
const str2:'jack'
str2 = 'jack666'

// 练习

// {
//   code:666,//666 404 401 503  200
//   msg:'okk'
// }



type Res = {
  code:200 | 404 | 401 | 503,
  msg:string
}

let res:Res = {
  code:200,
  msg:'okk'
}